#ifdef HERZELEID_DESKTOP
 #if _MSC_VER
  #pragma once
 #endif

 #ifndef __HERZELEID_IFRAMEWORKVIEW_INCLUDED__
  #define __HERZELEID_IFRAMEWORKVIEW_INCLUDED__
  #include "HerzeleidApplicationModelCore.hxx"
  #include "HerzeleidCoreApplicationInc.hxx"
  #include "HerzeleidCoreWindowInc.hxx"

// Represents an app view provider.
HerzeleidAppModelCoreNamespaceBegin class IFrameworkView
{
	typedef HerzeleidUICoreNamespaceImpl::CoreWindow CoreWindow; // CoreWindow local shortcut
	TinyTypeDecl( CoreWindow ); // CoreWindow local shortcut

	// TODO: Add view to the resource storage in ctor. 

public:

	// A method for app view initialization, which is called when an app object is launched.
	virtual void Initialize( 
		// The default view provided by the app object. You can use this instance in your implementation to obtain 
		// the CoreWindow created by the app object, and register callbacks for the Activated event.
		CoreApplicationViewPtr ApplicationView 
		) pure;
	// A method that uninitializes the app view.
	virtual void Uninitialize( 
		) pure;

	// A method that loads or activates any external resources used by the app view before Run is called.
	virtual void Load( 
		String16ConstRef wszEntryPoint // The name of the entry point method for the activated type.
		) pure;
	// A method that sets the current window for the app object's view.
	virtual void SetWindow( 
		CoreWindowPtr Window // The current window for the app object.
		) pure;
	// A method that starts the app view.
	virtual void Run( 
		) pure;

} HerzeleidAppModelCoreNamespaceEnd; 

HerzeleidAppModelCoreNamespaceBegin
	TinyTypeDecl( IFrameworkView );
HerzeleidAppModelCoreNamespaceEnd;

 #endif // !HERZELEID_IFRAMEWORKVIEW_INCLUDED__
#endif // !HERZELEID_DESKTOP
